from keras.datasets import mnist
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from tensorflow.keras.utils import to_categorical
(X_train, y_train), (X_test, y_test) = mnist.load_data()
print(X_train.shape)
print(X_test.shape)
(60000, 28, 28) (10000, 28, 28)
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow(X_train[i], cmap=plt.get_cmap('gray'))
plt.show()
X_train=(X_train.astype(float).reshape(X_train.shape[0], 784))/255
y_train=(y_train.astype(int))
X_test=(X_test.astype(float).reshape(X_test.shape[0], 784))/255
y_test=(y_test.astype(int))
print(X_train.shape)
print(y_train.shape)
(60000, 784) (60000,)
import tensorflow as tf
from tensorflow import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.optimizers import Adam
from tensorflow.keras import models
keras.backend.clear_session()
model1 = Sequential()
model1.add(Dense(1, activation='relu', input_shape=[784]))
model1.add(Dense(10, activation='softmax'))
model1.summary()
model1.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 1) 785 _________________________________________________________________ dense_1 (Dense) (None, 10) 20 ================================================================= Total params: 805 Trainable params: 805 Non-trainable params: 0 _________________________________________________________________
history1=model1.fit(X_train, y_train, batch_size=32, validation_data=(X_test, y_test), epochs=150)
Epoch 1/150 1875/1875 [==============================] - 15s 1ms/step - loss: 2.0429 - accuracy: 0.1998 - val_loss: 1.8188 - val_accuracy: 0.2452 Epoch 2/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.7932 - accuracy: 0.2492 - val_loss: 1.7508 - val_accuracy: 0.2664 Epoch 3/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.7351 - accuracy: 0.2717 - val_loss: 1.7167 - val_accuracy: 0.2880 Epoch 4/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6971 - accuracy: 0.2960 - val_loss: 1.6880 - val_accuracy: 0.3062 Epoch 5/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6781 - accuracy: 0.3043 - val_loss: 1.6657 - val_accuracy: 0.3060 Epoch 6/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6611 - accuracy: 0.3047 - val_loss: 1.6568 - val_accuracy: 0.3081 Epoch 7/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6479 - accuracy: 0.3086 - val_loss: 1.6517 - val_accuracy: 0.3055 Epoch 8/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6378 - accuracy: 0.3127 - val_loss: 1.6472 - val_accuracy: 0.3511 Epoch 9/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6243 - accuracy: 0.3689 - val_loss: 1.6189 - val_accuracy: 0.3799 Epoch 10/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.6035 - accuracy: 0.3770 - val_loss: 1.6027 - val_accuracy: 0.3721 Epoch 11/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5825 - accuracy: 0.3776 - val_loss: 1.5982 - val_accuracy: 0.3713 Epoch 12/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5802 - accuracy: 0.3756 - val_loss: 1.5954 - val_accuracy: 0.3763 Epoch 13/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5797 - accuracy: 0.3751 - val_loss: 1.5942 - val_accuracy: 0.3722 Epoch 14/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5784 - accuracy: 0.3749 - val_loss: 1.5883 - val_accuracy: 0.3735 Epoch 15/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5768 - accuracy: 0.3730 - val_loss: 1.5856 - val_accuracy: 0.3808 Epoch 16/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5727 - accuracy: 0.3747 - val_loss: 1.5875 - val_accuracy: 0.3717 Epoch 17/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5682 - accuracy: 0.3780 - val_loss: 1.5833 - val_accuracy: 0.3770 Epoch 18/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5600 - accuracy: 0.3754 - val_loss: 1.5851 - val_accuracy: 0.3793 Epoch 19/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5694 - accuracy: 0.3772 - val_loss: 1.5804 - val_accuracy: 0.3723 Epoch 20/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5659 - accuracy: 0.3791 - val_loss: 1.5835 - val_accuracy: 0.3742 Epoch 21/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5607 - accuracy: 0.3759 - val_loss: 1.5798 - val_accuracy: 0.3747 Epoch 22/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5580 - accuracy: 0.3799 - val_loss: 1.5765 - val_accuracy: 0.3751 Epoch 23/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5589 - accuracy: 0.3765 - val_loss: 1.5777 - val_accuracy: 0.3765 Epoch 24/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5559 - accuracy: 0.3735 - val_loss: 1.5799 - val_accuracy: 0.3755 Epoch 25/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5650 - accuracy: 0.3787 - val_loss: 1.5783 - val_accuracy: 0.3708 Epoch 26/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5630 - accuracy: 0.3743 - val_loss: 1.5776 - val_accuracy: 0.3794 Epoch 27/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5523 - accuracy: 0.3783 - val_loss: 1.5751 - val_accuracy: 0.3767 Epoch 28/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5541 - accuracy: 0.3785 - val_loss: 1.5775 - val_accuracy: 0.3736 Epoch 29/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5552 - accuracy: 0.3813 - val_loss: 1.5765 - val_accuracy: 0.3783 Epoch 30/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5513 - accuracy: 0.3769 - val_loss: 1.5754 - val_accuracy: 0.3725 Epoch 31/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5521 - accuracy: 0.3780 - val_loss: 1.5721 - val_accuracy: 0.3772 Epoch 32/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5527 - accuracy: 0.3789 - val_loss: 1.5750 - val_accuracy: 0.3701 Epoch 33/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5570 - accuracy: 0.3766 - val_loss: 1.5738 - val_accuracy: 0.3803 Epoch 34/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5544 - accuracy: 0.3781 - val_loss: 1.5784 - val_accuracy: 0.3693 Epoch 35/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5571 - accuracy: 0.3806 - val_loss: 1.5744 - val_accuracy: 0.3769 Epoch 36/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5515 - accuracy: 0.3796 - val_loss: 1.5841 - val_accuracy: 0.3624 Epoch 37/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5599 - accuracy: 0.3775 - val_loss: 1.5751 - val_accuracy: 0.3737 Epoch 38/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5572 - accuracy: 0.3776 - val_loss: 1.5738 - val_accuracy: 0.3745 Epoch 39/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5514 - accuracy: 0.3746 - val_loss: 1.5719 - val_accuracy: 0.3818 Epoch 40/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5494 - accuracy: 0.3843 - val_loss: 1.5703 - val_accuracy: 0.3748 Epoch 41/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5462 - accuracy: 0.3820 - val_loss: 1.5726 - val_accuracy: 0.3751 Epoch 42/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5467 - accuracy: 0.3831 - val_loss: 1.5716 - val_accuracy: 0.3825 Epoch 43/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5531 - accuracy: 0.3841 - val_loss: 1.5759 - val_accuracy: 0.3859 Epoch 44/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5526 - accuracy: 0.3865 - val_loss: 1.5717 - val_accuracy: 0.3889 Epoch 45/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5475 - accuracy: 0.3850 - val_loss: 1.5774 - val_accuracy: 0.3875 Epoch 46/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5535 - accuracy: 0.3876 - val_loss: 1.5792 - val_accuracy: 0.3926 Epoch 47/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5481 - accuracy: 0.3901 - val_loss: 1.5717 - val_accuracy: 0.3796 Epoch 48/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5470 - accuracy: 0.3838 - val_loss: 1.5760 - val_accuracy: 0.3840 Epoch 49/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5510 - accuracy: 0.3892 - val_loss: 1.5712 - val_accuracy: 0.3807 Epoch 50/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5558 - accuracy: 0.3906 - val_loss: 1.5701 - val_accuracy: 0.3887 Epoch 51/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5491 - accuracy: 0.3846 - val_loss: 1.5712 - val_accuracy: 0.3942 Epoch 52/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5471 - accuracy: 0.3949 - val_loss: 1.5695 - val_accuracy: 0.3890 Epoch 53/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5481 - accuracy: 0.3949 - val_loss: 1.5707 - val_accuracy: 0.3907 Epoch 54/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5584 - accuracy: 0.3913 - val_loss: 1.5686 - val_accuracy: 0.3834 Epoch 55/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5480 - accuracy: 0.3922 - val_loss: 1.5700 - val_accuracy: 0.3955 Epoch 56/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5410 - accuracy: 0.3959 - val_loss: 1.5684 - val_accuracy: 0.3947 Epoch 57/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5449 - accuracy: 0.3970 - val_loss: 1.5699 - val_accuracy: 0.3966 Epoch 58/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5464 - accuracy: 0.4013 - val_loss: 1.5679 - val_accuracy: 0.3991 Epoch 59/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5499 - accuracy: 0.4027 - val_loss: 1.5726 - val_accuracy: 0.3935 Epoch 60/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5461 - accuracy: 0.4045 - val_loss: 1.5706 - val_accuracy: 0.3984 Epoch 61/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5467 - accuracy: 0.4064 - val_loss: 1.5707 - val_accuracy: 0.3972 Epoch 62/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5489 - accuracy: 0.4059 - val_loss: 1.5700 - val_accuracy: 0.3957 Epoch 63/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5444 - accuracy: 0.4085 - val_loss: 1.5714 - val_accuracy: 0.4014 Epoch 64/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5442 - accuracy: 0.4074 - val_loss: 1.5689 - val_accuracy: 0.4184 Epoch 65/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5539 - accuracy: 0.4131 - val_loss: 1.5652 - val_accuracy: 0.4129 Epoch 66/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5376 - accuracy: 0.4172 - val_loss: 1.5682 - val_accuracy: 0.4132 Epoch 67/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5443 - accuracy: 0.4135 - val_loss: 1.5774 - val_accuracy: 0.4153 Epoch 68/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5429 - accuracy: 0.4179 - val_loss: 1.5641 - val_accuracy: 0.4056 Epoch 69/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5406 - accuracy: 0.4161 - val_loss: 1.5647 - val_accuracy: 0.4062 Epoch 70/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5452 - accuracy: 0.4118 - val_loss: 1.5758 - val_accuracy: 0.4008 Epoch 71/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5399 - accuracy: 0.4167 - val_loss: 1.5684 - val_accuracy: 0.4218 Epoch 72/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5425 - accuracy: 0.4163 - val_loss: 1.5745 - val_accuracy: 0.3976 Epoch 73/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5376 - accuracy: 0.4140 - val_loss: 1.5676 - val_accuracy: 0.4097 Epoch 74/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5357 - accuracy: 0.4178 - val_loss: 1.5636 - val_accuracy: 0.4124 Epoch 75/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5318 - accuracy: 0.4183 - val_loss: 1.5771 - val_accuracy: 0.3966 Epoch 76/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5407 - accuracy: 0.4182 - val_loss: 1.5611 - val_accuracy: 0.4222 Epoch 77/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5454 - accuracy: 0.4167 - val_loss: 1.5610 - val_accuracy: 0.4241 Epoch 78/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5368 - accuracy: 0.4167 - val_loss: 1.5635 - val_accuracy: 0.4240 Epoch 79/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5404 - accuracy: 0.4201 - val_loss: 1.5582 - val_accuracy: 0.4262 Epoch 80/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5372 - accuracy: 0.4164 - val_loss: 1.5663 - val_accuracy: 0.4179 Epoch 81/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5395 - accuracy: 0.4162 - val_loss: 1.5565 - val_accuracy: 0.4219 Epoch 82/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5318 - accuracy: 0.4198 - val_loss: 1.5568 - val_accuracy: 0.4243 Epoch 83/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5309 - accuracy: 0.4171 - val_loss: 1.5601 - val_accuracy: 0.4175 Epoch 84/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5373 - accuracy: 0.4206 - val_loss: 1.5553 - val_accuracy: 0.4200 Epoch 85/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5192 - accuracy: 0.4263 - val_loss: 1.5553 - val_accuracy: 0.4181 Epoch 86/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5281 - accuracy: 0.4209 - val_loss: 1.5544 - val_accuracy: 0.4143 Epoch 87/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5278 - accuracy: 0.4189 - val_loss: 1.5531 - val_accuracy: 0.4294 Epoch 88/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5376 - accuracy: 0.4254 - val_loss: 1.5548 - val_accuracy: 0.4239 Epoch 89/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5212 - accuracy: 0.4320 - val_loss: 1.5496 - val_accuracy: 0.4283 Epoch 90/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5252 - accuracy: 0.4281 - val_loss: 1.5487 - val_accuracy: 0.4326 Epoch 91/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5177 - accuracy: 0.4334 - val_loss: 1.5496 - val_accuracy: 0.4185 Epoch 92/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5297 - accuracy: 0.4296 - val_loss: 1.5508 - val_accuracy: 0.4365 Epoch 93/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5228 - accuracy: 0.4325 - val_loss: 1.5460 - val_accuracy: 0.4319 Epoch 94/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5186 - accuracy: 0.4314 - val_loss: 1.5446 - val_accuracy: 0.4418 Epoch 95/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5152 - accuracy: 0.4358 - val_loss: 1.5432 - val_accuracy: 0.4385 Epoch 96/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5241 - accuracy: 0.4351 - val_loss: 1.5417 - val_accuracy: 0.4324 Epoch 97/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5129 - accuracy: 0.4341 - val_loss: 1.5412 - val_accuracy: 0.4319 Epoch 98/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5223 - accuracy: 0.4328 - val_loss: 1.5404 - val_accuracy: 0.4379 Epoch 99/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5113 - accuracy: 0.4311 - val_loss: 1.5457 - val_accuracy: 0.4314 Epoch 100/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5183 - accuracy: 0.4330 - val_loss: 1.5393 - val_accuracy: 0.4317 Epoch 101/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5074 - accuracy: 0.4370 - val_loss: 1.5385 - val_accuracy: 0.4346 Epoch 102/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5133 - accuracy: 0.4282 - val_loss: 1.5397 - val_accuracy: 0.4278 Epoch 103/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5085 - accuracy: 0.4280 - val_loss: 1.5416 - val_accuracy: 0.4177 Epoch 104/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5085 - accuracy: 0.4345 - val_loss: 1.5335 - val_accuracy: 0.4292 Epoch 105/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5114 - accuracy: 0.4272 - val_loss: 1.5448 - val_accuracy: 0.4312 Epoch 106/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5155 - accuracy: 0.4300 - val_loss: 1.5334 - val_accuracy: 0.4270 Epoch 107/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5131 - accuracy: 0.4268 - val_loss: 1.5334 - val_accuracy: 0.4269 Epoch 108/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5117 - accuracy: 0.4260 - val_loss: 1.5369 - val_accuracy: 0.4261 Epoch 109/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5092 - accuracy: 0.4272 - val_loss: 1.5339 - val_accuracy: 0.4333 Epoch 110/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5097 - accuracy: 0.4314 - val_loss: 1.5330 - val_accuracy: 0.4268 Epoch 111/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5090 - accuracy: 0.4277 - val_loss: 1.5321 - val_accuracy: 0.4277 Epoch 112/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5096 - accuracy: 0.4238 - val_loss: 1.5308 - val_accuracy: 0.4326 Epoch 113/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5108 - accuracy: 0.4252 - val_loss: 1.5296 - val_accuracy: 0.4261 Epoch 114/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5028 - accuracy: 0.4250 - val_loss: 1.5317 - val_accuracy: 0.4293 Epoch 115/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5087 - accuracy: 0.4226 - val_loss: 1.5320 - val_accuracy: 0.4173 Epoch 116/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5086 - accuracy: 0.4258 - val_loss: 1.5309 - val_accuracy: 0.4266 Epoch 117/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5055 - accuracy: 0.4251 - val_loss: 1.5304 - val_accuracy: 0.4249 Epoch 118/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5137 - accuracy: 0.4199 - val_loss: 1.5338 - val_accuracy: 0.4307 Epoch 119/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5043 - accuracy: 0.4264 - val_loss: 1.5380 - val_accuracy: 0.4074 Epoch 120/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4975 - accuracy: 0.4203 - val_loss: 1.5377 - val_accuracy: 0.4153 Epoch 121/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4997 - accuracy: 0.4237 - val_loss: 1.5333 - val_accuracy: 0.4192 Epoch 122/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5175 - accuracy: 0.4209 - val_loss: 1.5365 - val_accuracy: 0.4182 Epoch 123/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4989 - accuracy: 0.4230 - val_loss: 1.5299 - val_accuracy: 0.4138 Epoch 124/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5117 - accuracy: 0.4194 - val_loss: 1.5319 - val_accuracy: 0.4080 Epoch 125/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5073 - accuracy: 0.4230 - val_loss: 1.5344 - val_accuracy: 0.4270 Epoch 126/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5120 - accuracy: 0.4205 - val_loss: 1.5325 - val_accuracy: 0.4153 Epoch 127/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5044 - accuracy: 0.4225 - val_loss: 1.5338 - val_accuracy: 0.4132 Epoch 128/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5052 - accuracy: 0.4170 - val_loss: 1.5313 - val_accuracy: 0.4149 Epoch 129/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5112 - accuracy: 0.4179 - val_loss: 1.5457 - val_accuracy: 0.4237 Epoch 130/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5070 - accuracy: 0.4227 - val_loss: 1.5365 - val_accuracy: 0.4073 Epoch 131/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5059 - accuracy: 0.4170 - val_loss: 1.5416 - val_accuracy: 0.4182 Epoch 132/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4995 - accuracy: 0.4217 - val_loss: 1.5300 - val_accuracy: 0.4136 Epoch 133/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5036 - accuracy: 0.4221 - val_loss: 1.5345 - val_accuracy: 0.4176 Epoch 134/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5003 - accuracy: 0.4242 - val_loss: 1.5277 - val_accuracy: 0.4179 Epoch 135/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5064 - accuracy: 0.4208 - val_loss: 1.5309 - val_accuracy: 0.4191 Epoch 136/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5049 - accuracy: 0.4195 - val_loss: 1.5440 - val_accuracy: 0.3996 Epoch 137/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5059 - accuracy: 0.4171 - val_loss: 1.5276 - val_accuracy: 0.4181 Epoch 138/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5045 - accuracy: 0.4230 - val_loss: 1.5322 - val_accuracy: 0.4182 Epoch 139/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5057 - accuracy: 0.4188 - val_loss: 1.5266 - val_accuracy: 0.4174 Epoch 140/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5088 - accuracy: 0.4166 - val_loss: 1.5357 - val_accuracy: 0.4104 Epoch 141/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5091 - accuracy: 0.4189 - val_loss: 1.5406 - val_accuracy: 0.4157 Epoch 142/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5012 - accuracy: 0.4175 - val_loss: 1.5327 - val_accuracy: 0.4121 Epoch 143/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4992 - accuracy: 0.4186 - val_loss: 1.5394 - val_accuracy: 0.4167 Epoch 144/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4993 - accuracy: 0.4190 - val_loss: 1.5337 - val_accuracy: 0.4146 Epoch 145/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4956 - accuracy: 0.4179 - val_loss: 1.5291 - val_accuracy: 0.4164 Epoch 146/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5077 - accuracy: 0.4180 - val_loss: 1.5287 - val_accuracy: 0.4075 Epoch 147/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5040 - accuracy: 0.4167 - val_loss: 1.5302 - val_accuracy: 0.4105 Epoch 148/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5048 - accuracy: 0.4167 - val_loss: 1.5320 - val_accuracy: 0.4129 Epoch 149/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.4993 - accuracy: 0.4211 - val_loss: 1.5282 - val_accuracy: 0.4128 Epoch 150/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.5006 - accuracy: 0.4212 - val_loss: 1.5302 - val_accuracy: 0.4194
from matplotlib.pyplot import figure
plt.figure(figsize=(15,15))
history1_df=pd.DataFrame(history1.history)
plt.plot(history1_df, linewidth=5)
plt.legend(history1_df.columns.to_list())
plt.show()
y_pred = model1.predict_classes(X_test)
plt.figure(figsize=(15,15))
for i in range(16):
plt.subplot(4,4, i+1)
plt.imshow(X_test[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_pred[i]), fontsize=15)
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
layer_outputs= [layer.output for layer in model1.layers]
activation_model=models.Model(inputs=model1.input, outputs=layer_outputs)
print(f"There are {len(layer_outputs)} layers")
There are 2 layers
activations = activation_model.predict(X_train)
hidden_layer_activation = activations[0]
output_layer_activations = activations[1]
print(hidden_layer_activation.shape)
print(f"The maximum activation value of the hidden nodes in the hidden layer is {hidden_layer_activation.max()}")
(60000, 1) The maximum activation value of the hidden nodes in the hidden layer is 14.184961318969727
y_train_pred= model1.predict_classes(X_train)
activation_data = {'actual_class':y_train}
activation_data["Node1"] = hidden_layer_activation[:,0]
activation_df = pd.DataFrame(activation_data)
for i in range(0,10):
activation_df['Output_Node_{}'.format(i)]=output_layer_activations[:,i]
activation_df['model1_prediction']=y_train_pred
y_train_pred = model1.predict_classes(X_train)
plt.figure(figsize=(15,15))
for i in range(0,16):
plt.subplot(4,4, i+1)
plt.imshow(X_train[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_train_pred[i]), fontsize=15)
display(activation_df.round(3).T.iloc[:,0:16])
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| actual_class | 5.000 | 0.000 | 4.000 | 1.000 | 9.000 | 2.000 | 1.000 | 3.000 | 1.000 | 4.000 | 3.000 | 5.000 | 3.000 | 6.000 | 1.000 | 7.000 |
| Node1 | 4.759 | 6.513 | 1.969 | 2.527 | 0.000 | 3.576 | 2.065 | 3.944 | 2.319 | 1.668 | 2.730 | 4.058 | 4.520 | 5.773 | 2.569 | 0.000 |
| Output_Node_0 | 0.082 | 0.379 | 0.000 | 0.001 | 0.000 | 0.011 | 0.000 | 0.022 | 0.000 | 0.000 | 0.001 | 0.028 | 0.058 | 0.241 | 0.001 | 0.000 |
| Output_Node_1 | 0.009 | 0.000 | 0.306 | 0.334 | 0.008 | 0.105 | 0.323 | 0.054 | 0.345 | 0.234 | 0.301 | 0.043 | 0.016 | 0.001 | 0.329 | 0.008 |
| Output_Node_2 | 0.256 | 0.143 | 0.007 | 0.032 | 0.000 | 0.144 | 0.010 | 0.188 | 0.019 | 0.003 | 0.048 | 0.201 | 0.243 | 0.222 | 0.035 | 0.000 |
| Output_Node_3 | 0.154 | 0.018 | 0.053 | 0.145 | 0.000 | 0.253 | 0.066 | 0.237 | 0.106 | 0.025 | 0.182 | 0.228 | 0.182 | 0.053 | 0.153 | 0.000 |
| Output_Node_4 | 0.001 | 0.000 | 0.345 | 0.215 | 0.064 | 0.023 | 0.330 | 0.008 | 0.273 | 0.358 | 0.158 | 0.006 | 0.001 | 0.000 | 0.202 | 0.064 |
| Output_Node_5 | 0.198 | 0.055 | 0.017 | 0.060 | 0.000 | 0.179 | 0.022 | 0.202 | 0.040 | 0.007 | 0.083 | 0.206 | 0.207 | 0.115 | 0.064 | 0.000 |
| Output_Node_6 | 0.157 | 0.390 | 0.000 | 0.003 | 0.000 | 0.032 | 0.001 | 0.058 | 0.001 | 0.000 | 0.005 | 0.068 | 0.122 | 0.322 | 0.003 | 0.000 |
| Output_Node_7 | 0.000 | 0.000 | 0.057 | 0.011 | 0.595 | 0.000 | 0.044 | 0.000 | 0.022 | 0.109 | 0.005 | 0.000 | 0.000 | 0.000 | 0.010 | 0.595 |
| Output_Node_8 | 0.143 | 0.015 | 0.058 | 0.151 | 0.000 | 0.250 | 0.071 | 0.230 | 0.113 | 0.027 | 0.188 | 0.220 | 0.170 | 0.047 | 0.159 | 0.000 |
| Output_Node_9 | 0.000 | 0.000 | 0.158 | 0.049 | 0.334 | 0.001 | 0.134 | 0.000 | 0.081 | 0.237 | 0.028 | 0.000 | 0.000 | 0.000 | 0.044 | 0.334 |
| model1_prediction | 2.000 | 6.000 | 4.000 | 1.000 | 7.000 | 3.000 | 4.000 | 3.000 | 1.000 | 4.000 | 1.000 | 3.000 | 2.000 | 6.000 | 1.000 | 7.000 |
activation_df['accurate']=np.where(activation_df['actual_class']==activation_df['model1_prediction'],1,0)
class_error=activation_df[activation_df['actual_class']!=activation_df['model1_prediction']].groupby(['actual_class'], as_index=False)[['model1_prediction']].agg(lambda x:x.value_counts().index[0])
class_error['most_common_error']=class_error['model1_prediction']
del class_error['model1_prediction']
class_accuracy=activation_df.groupby(['actual_class'], as_index=False)[['accurate']].mean()
class_accuracy=pd.merge(class_accuracy, class_error)
class_accuracy
| actual_class | accurate | most_common_error | |
|---|---|---|---|
| 0 | 0 | 0.591086 | 6 |
| 1 | 1 | 0.785524 | 4 |
| 2 | 2 | 0.345418 | 3 |
| 3 | 3 | 0.391127 | 2 |
| 4 | 4 | 0.446080 | 1 |
| 5 | 5 | 0.000000 | 2 |
| 6 | 6 | 0.365326 | 0 |
| 7 | 7 | 0.753073 | 9 |
| 8 | 8 | 0.150914 | 3 |
| 9 | 9 | 0.259371 | 7 |
import seaborn as sns
sns.set(rc={'figure.figsize':(15,10)})
sns.boxplot(y='Node1', x='actual_class', data=activation_df[['Node1','actual_class']], width=0.5, palette="colorblind")
<matplotlib.axes._subplots.AxesSubplot at 0x7f725d2dcd90>
keras.backend.clear_session()
model2 = Sequential()
model2.add(Dense(2, activation='relu', input_shape=[784]))
model2.add(Dense(10, activation='softmax'))
model2.summary()
model2.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 2) 1570 _________________________________________________________________ dense_1 (Dense) (None, 10) 30 ================================================================= Total params: 1,600 Trainable params: 1,600 Non-trainable params: 0 _________________________________________________________________
history2=model2.fit(X_train, y_train, batch_size=32, validation_data=(X_test, y_test), epochs=150)
Epoch 1/150 1875/1875 [==============================] - 3s 1ms/step - loss: 1.7826 - accuracy: 0.3368 - val_loss: 1.3003 - val_accuracy: 0.5152 Epoch 2/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.2825 - accuracy: 0.5296 - val_loss: 1.2023 - val_accuracy: 0.5561 Epoch 3/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.2010 - accuracy: 0.5625 - val_loss: 1.1627 - val_accuracy: 0.5844 Epoch 4/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1652 - accuracy: 0.5864 - val_loss: 1.1412 - val_accuracy: 0.5994 Epoch 5/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1428 - accuracy: 0.5973 - val_loss: 1.1293 - val_accuracy: 0.6042 Epoch 6/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1307 - accuracy: 0.6068 - val_loss: 1.1137 - val_accuracy: 0.6146 Epoch 7/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1188 - accuracy: 0.6164 - val_loss: 1.1014 - val_accuracy: 0.6282 Epoch 8/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1047 - accuracy: 0.6245 - val_loss: 1.0949 - val_accuracy: 0.6370 Epoch 9/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.1048 - accuracy: 0.6282 - val_loss: 1.0914 - val_accuracy: 0.6385 Epoch 10/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0911 - accuracy: 0.6346 - val_loss: 1.0907 - val_accuracy: 0.6332 Epoch 11/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0916 - accuracy: 0.6365 - val_loss: 1.0790 - val_accuracy: 0.6496 Epoch 12/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0903 - accuracy: 0.6387 - val_loss: 1.0738 - val_accuracy: 0.6475 Epoch 13/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0874 - accuracy: 0.6449 - val_loss: 1.0737 - val_accuracy: 0.6515 Epoch 14/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0810 - accuracy: 0.6461 - val_loss: 1.0693 - val_accuracy: 0.6595 Epoch 15/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0812 - accuracy: 0.6503 - val_loss: 1.0676 - val_accuracy: 0.6561 Epoch 16/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0739 - accuracy: 0.6482 - val_loss: 1.0639 - val_accuracy: 0.6601 Epoch 17/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0894 - accuracy: 0.6486 - val_loss: 1.0659 - val_accuracy: 0.6554 Epoch 18/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0716 - accuracy: 0.6566 - val_loss: 1.0668 - val_accuracy: 0.6598 Epoch 19/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0703 - accuracy: 0.6529 - val_loss: 1.0638 - val_accuracy: 0.6599 Epoch 20/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0656 - accuracy: 0.6557 - val_loss: 1.0585 - val_accuracy: 0.6644 Epoch 21/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0574 - accuracy: 0.6632 - val_loss: 1.0555 - val_accuracy: 0.6669 Epoch 22/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0499 - accuracy: 0.6658 - val_loss: 1.0567 - val_accuracy: 0.6691 Epoch 23/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0670 - accuracy: 0.6623 - val_loss: 1.0497 - val_accuracy: 0.6749 Epoch 24/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0585 - accuracy: 0.6638 - val_loss: 1.0519 - val_accuracy: 0.6694 Epoch 25/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0671 - accuracy: 0.6635 - val_loss: 1.0535 - val_accuracy: 0.6720 Epoch 26/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0601 - accuracy: 0.6627 - val_loss: 1.0500 - val_accuracy: 0.6706 Epoch 27/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0589 - accuracy: 0.6679 - val_loss: 1.0508 - val_accuracy: 0.6735 Epoch 28/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0647 - accuracy: 0.6678 - val_loss: 1.0496 - val_accuracy: 0.6720 Epoch 29/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0542 - accuracy: 0.6680 - val_loss: 1.0548 - val_accuracy: 0.6719 Epoch 30/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0597 - accuracy: 0.6713 - val_loss: 1.0599 - val_accuracy: 0.6743 Epoch 31/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0478 - accuracy: 0.6697 - val_loss: 1.0485 - val_accuracy: 0.6690 Epoch 32/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0433 - accuracy: 0.6734 - val_loss: 1.0569 - val_accuracy: 0.6725 Epoch 33/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0606 - accuracy: 0.6729 - val_loss: 1.0466 - val_accuracy: 0.6761 Epoch 34/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0495 - accuracy: 0.6728 - val_loss: 1.0492 - val_accuracy: 0.6744 Epoch 35/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0563 - accuracy: 0.6689 - val_loss: 1.0531 - val_accuracy: 0.6627 Epoch 36/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0504 - accuracy: 0.6716 - val_loss: 1.0444 - val_accuracy: 0.6794 Epoch 37/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0624 - accuracy: 0.6723 - val_loss: 1.0472 - val_accuracy: 0.6741 Epoch 38/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0440 - accuracy: 0.6733 - val_loss: 1.0474 - val_accuracy: 0.6687 Epoch 39/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0606 - accuracy: 0.6681 - val_loss: 1.0445 - val_accuracy: 0.6733 Epoch 40/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0496 - accuracy: 0.6705 - val_loss: 1.0568 - val_accuracy: 0.6676 Epoch 41/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0352 - accuracy: 0.6732 - val_loss: 1.0487 - val_accuracy: 0.6748 Epoch 42/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0438 - accuracy: 0.6725 - val_loss: 1.0463 - val_accuracy: 0.6768 Epoch 43/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0575 - accuracy: 0.6672 - val_loss: 1.0621 - val_accuracy: 0.6639 Epoch 44/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0534 - accuracy: 0.6689 - val_loss: 1.0410 - val_accuracy: 0.6756 Epoch 45/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0499 - accuracy: 0.6737 - val_loss: 1.0473 - val_accuracy: 0.6657 Epoch 46/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0405 - accuracy: 0.6745 - val_loss: 1.0445 - val_accuracy: 0.6719 Epoch 47/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0538 - accuracy: 0.6664 - val_loss: 1.0420 - val_accuracy: 0.6718 Epoch 48/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0347 - accuracy: 0.6725 - val_loss: 1.0427 - val_accuracy: 0.6734 Epoch 49/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0564 - accuracy: 0.6697 - val_loss: 1.0406 - val_accuracy: 0.6703 Epoch 50/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0498 - accuracy: 0.6719 - val_loss: 1.0405 - val_accuracy: 0.6736 Epoch 51/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0536 - accuracy: 0.6703 - val_loss: 1.0436 - val_accuracy: 0.6718 Epoch 52/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0412 - accuracy: 0.6717 - val_loss: 1.0442 - val_accuracy: 0.6738 Epoch 53/150 1875/1875 [==============================] - 3s 1ms/step - loss: 1.0543 - accuracy: 0.6679 - val_loss: 1.0403 - val_accuracy: 0.6741 Epoch 54/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0419 - accuracy: 0.6712 - val_loss: 1.0420 - val_accuracy: 0.6769 Epoch 55/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0554 - accuracy: 0.6703 - val_loss: 1.0367 - val_accuracy: 0.6760 Epoch 56/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0383 - accuracy: 0.6708 - val_loss: 1.0425 - val_accuracy: 0.6735 Epoch 57/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0482 - accuracy: 0.6677 - val_loss: 1.0577 - val_accuracy: 0.6669 Epoch 58/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0509 - accuracy: 0.6678 - val_loss: 1.0415 - val_accuracy: 0.6734 Epoch 59/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0529 - accuracy: 0.6690 - val_loss: 1.0380 - val_accuracy: 0.6776 Epoch 60/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0413 - accuracy: 0.6700 - val_loss: 1.0378 - val_accuracy: 0.6780 Epoch 61/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0494 - accuracy: 0.6671 - val_loss: 1.0402 - val_accuracy: 0.6764 Epoch 62/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0364 - accuracy: 0.6741 - val_loss: 1.0419 - val_accuracy: 0.6748 Epoch 63/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0319 - accuracy: 0.6729 - val_loss: 1.0401 - val_accuracy: 0.6733 Epoch 64/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0382 - accuracy: 0.6720 - val_loss: 1.0418 - val_accuracy: 0.6701 Epoch 65/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0538 - accuracy: 0.6684 - val_loss: 1.0482 - val_accuracy: 0.6699 Epoch 66/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0328 - accuracy: 0.6688 - val_loss: 1.0361 - val_accuracy: 0.6735 Epoch 67/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0479 - accuracy: 0.6689 - val_loss: 1.0403 - val_accuracy: 0.6688 Epoch 68/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0342 - accuracy: 0.6734 - val_loss: 1.0393 - val_accuracy: 0.6746 Epoch 69/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0476 - accuracy: 0.6712 - val_loss: 1.0375 - val_accuracy: 0.6783 Epoch 70/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0516 - accuracy: 0.6710 - val_loss: 1.0447 - val_accuracy: 0.6676 Epoch 71/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0519 - accuracy: 0.6721 - val_loss: 1.0378 - val_accuracy: 0.6716 Epoch 72/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0529 - accuracy: 0.6671 - val_loss: 1.0375 - val_accuracy: 0.6756 Epoch 73/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0345 - accuracy: 0.6748 - val_loss: 1.0407 - val_accuracy: 0.6721 Epoch 74/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0433 - accuracy: 0.6683 - val_loss: 1.0359 - val_accuracy: 0.6749 Epoch 75/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0341 - accuracy: 0.6712 - val_loss: 1.0378 - val_accuracy: 0.6789 Epoch 76/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0433 - accuracy: 0.6705 - val_loss: 1.0573 - val_accuracy: 0.6601 Epoch 77/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0438 - accuracy: 0.6701 - val_loss: 1.0425 - val_accuracy: 0.6701 Epoch 78/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0311 - accuracy: 0.6729 - val_loss: 1.0369 - val_accuracy: 0.6733 Epoch 79/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0384 - accuracy: 0.6698 - val_loss: 1.0443 - val_accuracy: 0.6706 Epoch 80/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0484 - accuracy: 0.6697 - val_loss: 1.0387 - val_accuracy: 0.6756 Epoch 81/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0465 - accuracy: 0.6700 - val_loss: 1.0349 - val_accuracy: 0.6777 Epoch 82/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0517 - accuracy: 0.6669 - val_loss: 1.0405 - val_accuracy: 0.6726 Epoch 83/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0466 - accuracy: 0.6697 - val_loss: 1.0367 - val_accuracy: 0.6789 Epoch 84/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0297 - accuracy: 0.6734 - val_loss: 1.0384 - val_accuracy: 0.6735 Epoch 85/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0397 - accuracy: 0.6714 - val_loss: 1.0414 - val_accuracy: 0.6769 Epoch 86/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0461 - accuracy: 0.6700 - val_loss: 1.0393 - val_accuracy: 0.6788 Epoch 87/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0351 - accuracy: 0.6701 - val_loss: 1.0388 - val_accuracy: 0.6716 Epoch 88/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0450 - accuracy: 0.6710 - val_loss: 1.0354 - val_accuracy: 0.6730 Epoch 89/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0479 - accuracy: 0.6718 - val_loss: 1.0367 - val_accuracy: 0.6735 Epoch 90/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0475 - accuracy: 0.6723 - val_loss: 1.0370 - val_accuracy: 0.6760 Epoch 91/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0425 - accuracy: 0.6722 - val_loss: 1.0372 - val_accuracy: 0.6697 Epoch 92/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0454 - accuracy: 0.6692 - val_loss: 1.0385 - val_accuracy: 0.6740 Epoch 93/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0443 - accuracy: 0.6687 - val_loss: 1.0385 - val_accuracy: 0.6653 Epoch 94/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0487 - accuracy: 0.6710 - val_loss: 1.0365 - val_accuracy: 0.6751 Epoch 95/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0387 - accuracy: 0.6703 - val_loss: 1.0388 - val_accuracy: 0.6722 Epoch 96/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0341 - accuracy: 0.6690 - val_loss: 1.0446 - val_accuracy: 0.6733 Epoch 97/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0513 - accuracy: 0.6696 - val_loss: 1.0422 - val_accuracy: 0.6683 Epoch 98/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0530 - accuracy: 0.6704 - val_loss: 1.0407 - val_accuracy: 0.6709 Epoch 99/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0531 - accuracy: 0.6654 - val_loss: 1.0409 - val_accuracy: 0.6762 Epoch 100/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0375 - accuracy: 0.6712 - val_loss: 1.0361 - val_accuracy: 0.6745 Epoch 101/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0392 - accuracy: 0.6729 - val_loss: 1.0350 - val_accuracy: 0.6772 Epoch 102/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0537 - accuracy: 0.6693 - val_loss: 1.0412 - val_accuracy: 0.6687 Epoch 103/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0401 - accuracy: 0.6718 - val_loss: 1.0352 - val_accuracy: 0.6737 Epoch 104/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0552 - accuracy: 0.6671 - val_loss: 1.0361 - val_accuracy: 0.6797 Epoch 105/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0482 - accuracy: 0.6702 - val_loss: 1.0371 - val_accuracy: 0.6735 Epoch 106/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0536 - accuracy: 0.6692 - val_loss: 1.0403 - val_accuracy: 0.6666 Epoch 107/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0353 - accuracy: 0.6718 - val_loss: 1.0388 - val_accuracy: 0.6726 Epoch 108/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0463 - accuracy: 0.6682 - val_loss: 1.0367 - val_accuracy: 0.6776 Epoch 109/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0401 - accuracy: 0.6740 - val_loss: 1.0357 - val_accuracy: 0.6739 Epoch 110/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0387 - accuracy: 0.6724 - val_loss: 1.0473 - val_accuracy: 0.6659 Epoch 111/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0403 - accuracy: 0.6698 - val_loss: 1.0424 - val_accuracy: 0.6732 Epoch 112/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0462 - accuracy: 0.6699 - val_loss: 1.0432 - val_accuracy: 0.6723 Epoch 113/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0458 - accuracy: 0.6681 - val_loss: 1.0352 - val_accuracy: 0.6774 Epoch 114/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0395 - accuracy: 0.6699 - val_loss: 1.0435 - val_accuracy: 0.6715 Epoch 115/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0497 - accuracy: 0.6709 - val_loss: 1.0374 - val_accuracy: 0.6754 Epoch 116/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0387 - accuracy: 0.6726 - val_loss: 1.0347 - val_accuracy: 0.6796 Epoch 117/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0393 - accuracy: 0.6710 - val_loss: 1.0418 - val_accuracy: 0.6751 Epoch 118/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0362 - accuracy: 0.6726 - val_loss: 1.0351 - val_accuracy: 0.6803 Epoch 119/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0503 - accuracy: 0.6704 - val_loss: 1.0435 - val_accuracy: 0.6699 Epoch 120/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0324 - accuracy: 0.6693 - val_loss: 1.0361 - val_accuracy: 0.6745 Epoch 121/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0268 - accuracy: 0.6727 - val_loss: 1.0407 - val_accuracy: 0.6749 Epoch 122/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0431 - accuracy: 0.6699 - val_loss: 1.0384 - val_accuracy: 0.6778 Epoch 123/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0448 - accuracy: 0.6730 - val_loss: 1.0402 - val_accuracy: 0.6744 Epoch 124/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0515 - accuracy: 0.6669 - val_loss: 1.0398 - val_accuracy: 0.6753 Epoch 125/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0451 - accuracy: 0.6707 - val_loss: 1.0490 - val_accuracy: 0.6641 Epoch 126/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0527 - accuracy: 0.6665 - val_loss: 1.0360 - val_accuracy: 0.6750 Epoch 127/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0470 - accuracy: 0.6675 - val_loss: 1.0479 - val_accuracy: 0.6700 Epoch 128/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0483 - accuracy: 0.6693 - val_loss: 1.0427 - val_accuracy: 0.6735 Epoch 129/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0287 - accuracy: 0.6741 - val_loss: 1.0376 - val_accuracy: 0.6727 Epoch 130/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0459 - accuracy: 0.6692 - val_loss: 1.0456 - val_accuracy: 0.6777 Epoch 131/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0395 - accuracy: 0.6724 - val_loss: 1.0426 - val_accuracy: 0.6778 Epoch 132/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0326 - accuracy: 0.6724 - val_loss: 1.0424 - val_accuracy: 0.6755 Epoch 133/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0343 - accuracy: 0.6726 - val_loss: 1.0391 - val_accuracy: 0.6752 Epoch 134/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0541 - accuracy: 0.6682 - val_loss: 1.0322 - val_accuracy: 0.6782 Epoch 135/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0360 - accuracy: 0.6729 - val_loss: 1.0397 - val_accuracy: 0.6749 Epoch 136/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0371 - accuracy: 0.6694 - val_loss: 1.0381 - val_accuracy: 0.6751 Epoch 137/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0432 - accuracy: 0.6716 - val_loss: 1.0405 - val_accuracy: 0.6707 Epoch 138/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0387 - accuracy: 0.6693 - val_loss: 1.0442 - val_accuracy: 0.6621 Epoch 139/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0471 - accuracy: 0.6710 - val_loss: 1.0403 - val_accuracy: 0.6723 Epoch 140/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0274 - accuracy: 0.6710 - val_loss: 1.0438 - val_accuracy: 0.6726 Epoch 141/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0477 - accuracy: 0.6685 - val_loss: 1.0381 - val_accuracy: 0.6713 Epoch 142/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0388 - accuracy: 0.6705 - val_loss: 1.0388 - val_accuracy: 0.6745 Epoch 143/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0288 - accuracy: 0.6698 - val_loss: 1.0376 - val_accuracy: 0.6760 Epoch 144/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0420 - accuracy: 0.6692 - val_loss: 1.0362 - val_accuracy: 0.6783 Epoch 145/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0447 - accuracy: 0.6690 - val_loss: 1.0394 - val_accuracy: 0.6737 Epoch 146/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0446 - accuracy: 0.6717 - val_loss: 1.0388 - val_accuracy: 0.6734 Epoch 147/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0386 - accuracy: 0.6703 - val_loss: 1.0391 - val_accuracy: 0.6759 Epoch 148/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0473 - accuracy: 0.6679 - val_loss: 1.0447 - val_accuracy: 0.6724 Epoch 149/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0406 - accuracy: 0.6701 - val_loss: 1.0436 - val_accuracy: 0.6722 Epoch 150/150 1875/1875 [==============================] - 2s 1ms/step - loss: 1.0416 - accuracy: 0.6702 - val_loss: 1.0389 - val_accuracy: 0.6765
from matplotlib.pyplot import figure
plt.figure(figsize=(15,15))
history2_df=pd.DataFrame(history2.history)
plt.plot(history2_df, linewidth=5)
plt.legend(history2_df.columns.to_list())
plt.show()
y_pred2 = model2.predict_classes(X_test)
plt.figure(figsize=(15,15))
for i in range(16):
plt.subplot(4,4, i+1)
plt.imshow(X_test[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_pred2[i]), fontsize=15)
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
layer_outputs= [layer.output for layer in model2.layers]
activation_model2=models.Model(inputs=model2.input, outputs=layer_outputs)
print(f"There are {len(layer_outputs)} layers")
There are 2 layers
activations2 = activation_model2.predict(X_train)
hidden_layer_activation2 = activations2[0]
output_layer_activations2 = activations2[1]
print(hidden_layer_activation2.shape)
print(f"The maximum activation value of the hidden nodes in the hidden layer is {hidden_layer_activation2.max()}")
(60000, 2) The maximum activation value of the hidden nodes in the hidden layer is 224.8174285888672
y_train_pred.shape
(60000,)
y_train_pred2=model2.predict_classes(X_train)
activation_data2 = {'actual_class':y_train}
activation_data2["Node1"] = hidden_layer_activation2[:,0]
activation_data2["Node2"] = hidden_layer_activation2[:,1]
activation_df2 = pd.DataFrame(activation_data2)
for i in range(0,10):
activation_df2['Output_Node_{}'.format(i)]=output_layer_activations2[:,i]
activation_df2['model2_prediction']=y_train_pred2
plt.figure(figsize=(15,15))
for i in range(0,16):
plt.subplot(4,4, i+1)
plt.imshow(X_train[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_train_pred2[i]), fontsize=15)
display(activation_df2.round(3).T.iloc[:,0:16])
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| actual_class | 5.000 | 0.000 | 4.000 | 1.000 | 9.000000 | 2.000 | 1.000 | 3.000 | 1.000 | 4.000 | 3.000 | 5.000 | 3.000 | 6.000000 | 1.000 | 7.000000 |
| Node1 | 7.230 | 0.000 | 28.329 | 5.837 | 48.897999 | 20.017 | 8.073 | 15.295 | 2.803 | 17.181 | 14.467 | 0.450 | 12.868 | 66.507004 | 0.071 | 54.271999 |
| Node2 | 0.000 | 0.000 | 6.149 | 3.837 | 5.734000 | 0.659 | 4.333 | 1.672 | 3.897 | 5.394 | 1.449 | 1.912 | 0.843 | 0.000000 | 3.813 | 4.513000 |
| Output_Node_0 | 0.597 | 0.877 | 0.000 | 0.000 | 0.000000 | 0.003 | 0.000 | 0.002 | 0.000 | 0.000 | 0.005 | 0.018 | 0.033 | 0.000000 | 0.000 | 0.000000 |
| Output_Node_1 | 0.000 | 0.000 | 0.001 | 0.853 | 0.000000 | 0.000 | 0.829 | 0.000 | 0.943 | 0.088 | 0.000 | 0.082 | 0.000 | 0.000000 | 0.966 | 0.000000 |
| Output_Node_2 | 0.102 | 0.006 | 0.000 | 0.000 | 0.000000 | 0.499 | 0.000 | 0.228 | 0.000 | 0.000 | 0.248 | 0.004 | 0.303 | 0.095000 | 0.000 | 0.000000 |
| Output_Node_3 | 0.157 | 0.024 | 0.000 | 0.004 | 0.000000 | 0.222 | 0.002 | 0.429 | 0.001 | 0.000 | 0.441 | 0.067 | 0.417 | 0.000000 | 0.000 | 0.000000 |
| Output_Node_4 | 0.000 | 0.000 | 0.833 | 0.033 | 0.091000 | 0.000 | 0.106 | 0.000 | 0.011 | 0.827 | 0.000 | 0.000 | 0.000 | 0.000000 | 0.004 | 0.005000 |
| Output_Node_5 | 0.085 | 0.089 | 0.000 | 0.035 | 0.000000 | 0.006 | 0.010 | 0.076 | 0.020 | 0.000 | 0.084 | 0.717 | 0.084 | 0.000000 | 0.019 | 0.000000 |
| Output_Node_6 | 0.047 | 0.002 | 0.000 | 0.000 | 0.000000 | 0.239 | 0.000 | 0.034 | 0.000 | 0.000 | 0.043 | 0.000 | 0.085 | 0.880000 | 0.000 | 0.000000 |
| Output_Node_7 | 0.000 | 0.000 | 0.001 | 0.001 | 0.053000 | 0.013 | 0.001 | 0.031 | 0.000 | 0.001 | 0.021 | 0.000 | 0.007 | 0.025000 | 0.000 | 0.425000 |
| Output_Node_8 | 0.012 | 0.003 | 0.000 | 0.070 | 0.000000 | 0.019 | 0.044 | 0.197 | 0.023 | 0.008 | 0.157 | 0.111 | 0.071 | 0.000000 | 0.011 | 0.000000 |
| Output_Node_9 | 0.000 | 0.000 | 0.164 | 0.004 | 0.856000 | 0.000 | 0.009 | 0.003 | 0.001 | 0.075 | 0.001 | 0.000 | 0.000 | 0.000000 | 0.000 | 0.569000 |
| model2_prediction | 0.000 | 0.000 | 4.000 | 1.000 | 9.000000 | 2.000 | 1.000 | 3.000 | 1.000 | 4.000 | 3.000 | 5.000 | 3.000 | 6.000000 | 1.000 | 9.000000 |
activation_df2['accurate']=np.where(activation_df2['actual_class']==activation_df2['model2_prediction'],1,0)
class_error2=activation_df2[activation_df2['actual_class']!=activation_df2['model2_prediction']].groupby(['actual_class'], as_index=False)[['model2_prediction']].agg(lambda x:x.value_counts().index[0])
class_error2['most_common_error']=class_error2['model2_prediction']
del class_error2['model2_prediction']
class_accuracy2=activation_df2.groupby(['actual_class'], as_index=False)[['accurate']].mean()
class_accuracy2=pd.merge(class_accuracy2, class_error2)
class_accuracy2
| actual_class | accurate | most_common_error | |
|---|---|---|---|
| 0 | 0 | 0.876245 | 5 |
| 1 | 1 | 0.906853 | 8 |
| 2 | 2 | 0.411044 | 6 |
| 3 | 3 | 0.399609 | 8 |
| 4 | 4 | 0.827114 | 9 |
| 5 | 5 | 0.609666 | 8 |
| 6 | 6 | 0.629267 | 2 |
| 7 | 7 | 0.737271 | 9 |
| 8 | 8 | 0.598359 | 3 |
| 9 | 9 | 0.698437 | 4 |
import seaborn as sns
from matplotlib.pyplot import figure
fig, axes = plt.subplots(2,1)
sns.set(rc={'figure.figsize':(30,20)})
sns.boxplot(y='Node1', x='actual_class', data=activation_df2[['Node1','actual_class']], width=0.5, palette="colorblind", ax=axes[0])
sns.boxplot(y='Node2', x='actual_class', data=activation_df2[['Node2','actual_class']], width=0.5, palette="colorblind", ax=axes[1])
plt.show()
plt.figure(figsize=(20,12))
sns.scatterplot(
x="Node1", y="Node2",
hue="actual_class",
palette=sns.color_palette("hls", 10),
data=activation_df2,
legend="full",
alpha=0.3
);
best_model = Sequential()
best_model.add(Dense(256, activation='relu', input_shape=[784]))
best_model.add(Dense(10, activation='softmax'))
best_model.summary()
best_model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_2 (Dense) (None, 256) 200960 _________________________________________________________________ dense_3 (Dense) (None, 10) 2570 ================================================================= Total params: 203,530 Trainable params: 203,530 Non-trainable params: 0 _________________________________________________________________
best_history=best_model.fit(X_train, y_train, batch_size=32, validation_data=(X_test, y_test), epochs=150)
Epoch 1/150 1875/1875 [==============================] - 6s 3ms/step - loss: 0.3597 - accuracy: 0.8969 - val_loss: 0.1088 - val_accuracy: 0.9672 Epoch 2/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.1051 - accuracy: 0.9700 - val_loss: 0.0874 - val_accuracy: 0.9749 Epoch 3/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0706 - accuracy: 0.9794 - val_loss: 0.0865 - val_accuracy: 0.9760 Epoch 4/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0535 - accuracy: 0.9854 - val_loss: 0.0813 - val_accuracy: 0.9785 Epoch 5/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0452 - accuracy: 0.9871 - val_loss: 0.0736 - val_accuracy: 0.9792 Epoch 6/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0352 - accuracy: 0.9900 - val_loss: 0.0769 - val_accuracy: 0.9808 Epoch 7/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0284 - accuracy: 0.9919 - val_loss: 0.0819 - val_accuracy: 0.9804 Epoch 8/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0255 - accuracy: 0.9930 - val_loss: 0.0883 - val_accuracy: 0.9800 Epoch 9/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0202 - accuracy: 0.9943 - val_loss: 0.0888 - val_accuracy: 0.9801 Epoch 10/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0162 - accuracy: 0.9952 - val_loss: 0.0984 - val_accuracy: 0.9782 Epoch 11/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0158 - accuracy: 0.9960 - val_loss: 0.0954 - val_accuracy: 0.9800 Epoch 12/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0127 - accuracy: 0.9962 - val_loss: 0.1004 - val_accuracy: 0.9803 Epoch 13/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0112 - accuracy: 0.9971 - val_loss: 0.1087 - val_accuracy: 0.9793 Epoch 14/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0086 - accuracy: 0.9977 - val_loss: 0.1100 - val_accuracy: 0.9801 Epoch 15/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0069 - accuracy: 0.9977 - val_loss: 0.1023 - val_accuracy: 0.9812 Epoch 16/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0057 - accuracy: 0.9985 - val_loss: 0.1300 - val_accuracy: 0.9793 Epoch 17/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0051 - accuracy: 0.9984 - val_loss: 0.1203 - val_accuracy: 0.9787 Epoch 18/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0049 - accuracy: 0.9988 - val_loss: 0.1267 - val_accuracy: 0.9792 Epoch 19/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0033 - accuracy: 0.9991 - val_loss: 0.1246 - val_accuracy: 0.9809 Epoch 20/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0027 - accuracy: 0.9994 - val_loss: 0.1261 - val_accuracy: 0.9824 Epoch 21/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0035 - accuracy: 0.9992 - val_loss: 0.1366 - val_accuracy: 0.9805 Epoch 22/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0025 - accuracy: 0.9994 - val_loss: 0.1386 - val_accuracy: 0.9798 Epoch 23/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0021 - accuracy: 0.9994 - val_loss: 0.1399 - val_accuracy: 0.9803 Epoch 24/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0022 - accuracy: 0.9994 - val_loss: 0.1596 - val_accuracy: 0.9798 Epoch 25/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0020 - accuracy: 0.9995 - val_loss: 0.1565 - val_accuracy: 0.9804 Epoch 26/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0014 - accuracy: 0.9996 - val_loss: 0.1684 - val_accuracy: 0.9800 Epoch 27/150 1875/1875 [==============================] - 5s 3ms/step - loss: 0.0017 - accuracy: 0.9996 - val_loss: 0.1671 - val_accuracy: 0.9794 Epoch 28/150 1875/1875 [==============================] - 5s 3ms/step - loss: 8.0541e-04 - accuracy: 0.9998 - val_loss: 0.1661 - val_accuracy: 0.9808 Epoch 29/150 1875/1875 [==============================] - 6s 3ms/step - loss: 0.0011 - accuracy: 0.9997 - val_loss: 0.1679 - val_accuracy: 0.9798 Epoch 30/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.1791e-04 - accuracy: 0.9999 - val_loss: 0.1702 - val_accuracy: 0.9800 Epoch 31/150 1875/1875 [==============================] - 6s 3ms/step - loss: 7.3067e-04 - accuracy: 0.9997 - val_loss: 0.1767 - val_accuracy: 0.9804 Epoch 32/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.4035e-04 - accuracy: 0.9998 - val_loss: 0.1912 - val_accuracy: 0.9795 Epoch 33/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.1088e-04 - accuracy: 0.9999 - val_loss: 0.1892 - val_accuracy: 0.9801 Epoch 34/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.8972e-04 - accuracy: 0.9998 - val_loss: 0.1884 - val_accuracy: 0.9798 Epoch 35/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.5839e-04 - accuracy: 0.9999 - val_loss: 0.1873 - val_accuracy: 0.9811 Epoch 36/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.9644e-04 - accuracy: 0.9999 - val_loss: 0.1894 - val_accuracy: 0.9813 Epoch 37/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.3751e-04 - accuracy: 0.9999 - val_loss: 0.1940 - val_accuracy: 0.9813 Epoch 38/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.5972e-04 - accuracy: 0.9999 - val_loss: 0.1957 - val_accuracy: 0.9807 Epoch 39/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.3527e-04 - accuracy: 0.9999 - val_loss: 0.1997 - val_accuracy: 0.9795 Epoch 40/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.8967e-05 - accuracy: 1.0000 - val_loss: 0.1964 - val_accuracy: 0.9810 Epoch 41/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.3323e-05 - accuracy: 1.0000 - val_loss: 0.2078 - val_accuracy: 0.9797 Epoch 42/150 1875/1875 [==============================] - 6s 3ms/step - loss: 9.2813e-06 - accuracy: 1.0000 - val_loss: 0.2083 - val_accuracy: 0.9795 Epoch 43/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.4583e-05 - accuracy: 1.0000 - val_loss: 0.2066 - val_accuracy: 0.9811 Epoch 44/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.7486e-05 - accuracy: 1.0000 - val_loss: 0.2165 - val_accuracy: 0.9803 Epoch 45/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.5334e-06 - accuracy: 1.0000 - val_loss: 0.2096 - val_accuracy: 0.9808 Epoch 46/150 1875/1875 [==============================] - 6s 3ms/step - loss: 4.7485e-06 - accuracy: 1.0000 - val_loss: 0.2113 - val_accuracy: 0.9808 Epoch 47/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.2838e-06 - accuracy: 1.0000 - val_loss: 0.2109 - val_accuracy: 0.9807 Epoch 48/150 1875/1875 [==============================] - 5s 3ms/step - loss: 8.5120e-06 - accuracy: 1.0000 - val_loss: 0.2139 - val_accuracy: 0.9816 Epoch 49/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.0795e-06 - accuracy: 1.0000 - val_loss: 0.2152 - val_accuracy: 0.9808 Epoch 50/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.3526e-08 - accuracy: 1.0000 - val_loss: 0.2173 - val_accuracy: 0.9812 Epoch 51/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.4388e-08 - accuracy: 1.0000 - val_loss: 0.2182 - val_accuracy: 0.9810 Epoch 52/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.0695e-08 - accuracy: 1.0000 - val_loss: 0.2219 - val_accuracy: 0.9810 Epoch 53/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.7942e-08 - accuracy: 1.0000 - val_loss: 0.2248 - val_accuracy: 0.9810 Epoch 54/150 1875/1875 [==============================] - 5s 3ms/step - loss: 8.6952e-09 - accuracy: 1.0000 - val_loss: 0.2241 - val_accuracy: 0.9809 Epoch 55/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.0508e-08 - accuracy: 1.0000 - val_loss: 0.2299 - val_accuracy: 0.9807 Epoch 56/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.0793e-08 - accuracy: 1.0000 - val_loss: 0.2283 - val_accuracy: 0.9814 Epoch 57/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.9919e-09 - accuracy: 1.0000 - val_loss: 0.2308 - val_accuracy: 0.9806 Epoch 58/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.1304e-09 - accuracy: 1.0000 - val_loss: 0.2331 - val_accuracy: 0.9806 Epoch 59/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.2387e-09 - accuracy: 1.0000 - val_loss: 0.2337 - val_accuracy: 0.9804 Epoch 60/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.4006e-09 - accuracy: 1.0000 - val_loss: 0.2338 - val_accuracy: 0.9805 Epoch 61/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.2339e-09 - accuracy: 1.0000 - val_loss: 0.2373 - val_accuracy: 0.9802 Epoch 62/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.2076e-09 - accuracy: 1.0000 - val_loss: 0.2378 - val_accuracy: 0.9802 Epoch 63/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.5012e-09 - accuracy: 1.0000 - val_loss: 0.2377 - val_accuracy: 0.9801 Epoch 64/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.5859e-09 - accuracy: 1.0000 - val_loss: 0.2413 - val_accuracy: 0.9795 Epoch 65/150 1875/1875 [==============================] - 6s 3ms/step - loss: 4.9135e-09 - accuracy: 1.0000 - val_loss: 0.2408 - val_accuracy: 0.9801 Epoch 66/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.6176e-09 - accuracy: 1.0000 - val_loss: 0.2423 - val_accuracy: 0.9797 Epoch 67/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.8676e-09 - accuracy: 1.0000 - val_loss: 0.2409 - val_accuracy: 0.9798 Epoch 68/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.0027e-09 - accuracy: 1.0000 - val_loss: 0.2409 - val_accuracy: 0.9801 Epoch 69/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.1924e-09 - accuracy: 1.0000 - val_loss: 0.2424 - val_accuracy: 0.9799 Epoch 70/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.9782e-09 - accuracy: 1.0000 - val_loss: 0.2426 - val_accuracy: 0.9799 Epoch 71/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.8699e-09 - accuracy: 1.0000 - val_loss: 0.2440 - val_accuracy: 0.9795 Epoch 72/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.8025e-09 - accuracy: 1.0000 - val_loss: 0.2457 - val_accuracy: 0.9796 Epoch 73/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.1855e-09 - accuracy: 1.0000 - val_loss: 0.2449 - val_accuracy: 0.9798 Epoch 74/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.9025e-09 - accuracy: 1.0000 - val_loss: 0.2472 - val_accuracy: 0.9796 Epoch 75/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.1768e-09 - accuracy: 1.0000 - val_loss: 0.2467 - val_accuracy: 0.9798 Epoch 76/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.1310e-09 - accuracy: 1.0000 - val_loss: 0.2471 - val_accuracy: 0.9799 Epoch 77/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.3365e-09 - accuracy: 1.0000 - val_loss: 0.2472 - val_accuracy: 0.9799 Epoch 78/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.3111e-09 - accuracy: 1.0000 - val_loss: 0.2476 - val_accuracy: 0.9798 Epoch 79/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.2904e-09 - accuracy: 1.0000 - val_loss: 0.2481 - val_accuracy: 0.9791 Epoch 80/150 1875/1875 [==============================] - 6s 3ms/step - loss: 4.9192e-09 - accuracy: 1.0000 - val_loss: 0.2492 - val_accuracy: 0.9795 Epoch 81/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.2140e-09 - accuracy: 1.0000 - val_loss: 0.2546 - val_accuracy: 0.9791 Epoch 82/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.3215e-06 - accuracy: 1.0000 - val_loss: 0.2610 - val_accuracy: 0.9795 Epoch 83/150 1875/1875 [==============================] - 6s 3ms/step - loss: 8.9583e-07 - accuracy: 1.0000 - val_loss: 0.2363 - val_accuracy: 0.9802 Epoch 84/150 1875/1875 [==============================] - 6s 3ms/step - loss: 7.7554e-06 - accuracy: 1.0000 - val_loss: 0.2430 - val_accuracy: 0.9800 Epoch 85/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.1835e-06 - accuracy: 1.0000 - val_loss: 0.2526 - val_accuracy: 0.9790 Epoch 86/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.1958e-07 - accuracy: 1.0000 - val_loss: 0.2374 - val_accuracy: 0.9801 Epoch 87/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.2374e-09 - accuracy: 1.0000 - val_loss: 0.2411 - val_accuracy: 0.9801 Epoch 88/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.8514e-09 - accuracy: 1.0000 - val_loss: 0.2443 - val_accuracy: 0.9801 Epoch 89/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.3400e-09 - accuracy: 1.0000 - val_loss: 0.2463 - val_accuracy: 0.9802 Epoch 90/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.2255e-09 - accuracy: 1.0000 - val_loss: 0.2463 - val_accuracy: 0.9802 Epoch 91/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.5613e-09 - accuracy: 1.0000 - val_loss: 0.2506 - val_accuracy: 0.9798 Epoch 92/150 1875/1875 [==============================] - 6s 3ms/step - loss: 4.3222e-09 - accuracy: 1.0000 - val_loss: 0.2504 - val_accuracy: 0.9800 Epoch 93/150 1875/1875 [==============================] - 6s 3ms/step - loss: 3.3594e-09 - accuracy: 1.0000 - val_loss: 0.2515 - val_accuracy: 0.9801 Epoch 94/150 1875/1875 [==============================] - 6s 3ms/step - loss: 3.6186e-09 - accuracy: 1.0000 - val_loss: 0.2516 - val_accuracy: 0.9793 Epoch 95/150 1875/1875 [==============================] - 6s 3ms/step - loss: 6.3554e-09 - accuracy: 1.0000 - val_loss: 0.2533 - val_accuracy: 0.9799 Epoch 96/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.6432e-09 - accuracy: 1.0000 - val_loss: 0.2539 - val_accuracy: 0.9796 Epoch 97/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.2739e-09 - accuracy: 1.0000 - val_loss: 0.2548 - val_accuracy: 0.9798 Epoch 98/150 1875/1875 [==============================] - 6s 3ms/step - loss: 4.2456e-09 - accuracy: 1.0000 - val_loss: 0.2564 - val_accuracy: 0.9796 Epoch 99/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.1235e-09 - accuracy: 1.0000 - val_loss: 0.2562 - val_accuracy: 0.9794 Epoch 100/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.4870e-09 - accuracy: 1.0000 - val_loss: 0.2590 - val_accuracy: 0.9796 Epoch 101/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.0380e-09 - accuracy: 1.0000 - val_loss: 0.2586 - val_accuracy: 0.9793 Epoch 102/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.4318e-09 - accuracy: 1.0000 - val_loss: 0.2604 - val_accuracy: 0.9795 Epoch 103/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.9481e-09 - accuracy: 1.0000 - val_loss: 0.2617 - val_accuracy: 0.9793 Epoch 104/150 1875/1875 [==============================] - 5s 3ms/step - loss: 6.6135e-07 - accuracy: 1.0000 - val_loss: 0.2632 - val_accuracy: 0.9787 Epoch 105/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.7174e-05 - accuracy: 1.0000 - val_loss: 0.2486 - val_accuracy: 0.9803 Epoch 106/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.2150e-05 - accuracy: 1.0000 - val_loss: 0.2495 - val_accuracy: 0.9805 Epoch 107/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.1713e-05 - accuracy: 1.0000 - val_loss: 0.2600 - val_accuracy: 0.9798 Epoch 108/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.3312e-06 - accuracy: 1.0000 - val_loss: 0.2422 - val_accuracy: 0.9816 Epoch 109/150 1875/1875 [==============================] - 6s 3ms/step - loss: 6.4893e-08 - accuracy: 1.0000 - val_loss: 0.2448 - val_accuracy: 0.9804 Epoch 110/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.8084e-09 - accuracy: 1.0000 - val_loss: 0.2466 - val_accuracy: 0.9803 Epoch 111/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.5875e-09 - accuracy: 1.0000 - val_loss: 0.2494 - val_accuracy: 0.9803 Epoch 112/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.1967e-09 - accuracy: 1.0000 - val_loss: 0.2524 - val_accuracy: 0.9804 Epoch 113/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.7476e-09 - accuracy: 1.0000 - val_loss: 0.2515 - val_accuracy: 0.9801 Epoch 114/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.8782e-09 - accuracy: 1.0000 - val_loss: 0.2550 - val_accuracy: 0.9802 Epoch 115/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.7461e-09 - accuracy: 1.0000 - val_loss: 0.2560 - val_accuracy: 0.9799 Epoch 116/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.6089e-09 - accuracy: 1.0000 - val_loss: 0.2575 - val_accuracy: 0.9800 Epoch 117/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.3693e-09 - accuracy: 1.0000 - val_loss: 0.2607 - val_accuracy: 0.9801 Epoch 118/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.1623e-05 - accuracy: 1.0000 - val_loss: 0.2864 - val_accuracy: 0.9774 Epoch 119/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.7083e-05 - accuracy: 1.0000 - val_loss: 0.2826 - val_accuracy: 0.9778 Epoch 120/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.7648e-05 - accuracy: 1.0000 - val_loss: 0.2558 - val_accuracy: 0.9800 Epoch 121/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.3867e-07 - accuracy: 1.0000 - val_loss: 0.2484 - val_accuracy: 0.9809 Epoch 122/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.7669e-09 - accuracy: 1.0000 - val_loss: 0.2490 - val_accuracy: 0.9803 Epoch 123/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.3041e-09 - accuracy: 1.0000 - val_loss: 0.2499 - val_accuracy: 0.9803 Epoch 124/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.6240e-09 - accuracy: 1.0000 - val_loss: 0.2533 - val_accuracy: 0.9808 Epoch 125/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.6680e-09 - accuracy: 1.0000 - val_loss: 0.2582 - val_accuracy: 0.9799 Epoch 126/150 1875/1875 [==============================] - 6s 3ms/step - loss: 5.0867e-09 - accuracy: 1.0000 - val_loss: 0.2678 - val_accuracy: 0.9794 Epoch 127/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.1557e-05 - accuracy: 1.0000 - val_loss: 0.2668 - val_accuracy: 0.9800 Epoch 128/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.6776e-06 - accuracy: 1.0000 - val_loss: 0.2516 - val_accuracy: 0.9799 Epoch 129/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.4938e-07 - accuracy: 1.0000 - val_loss: 0.2485 - val_accuracy: 0.9808 Epoch 130/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.8328e-09 - accuracy: 1.0000 - val_loss: 0.2487 - val_accuracy: 0.9805 Epoch 131/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.0585e-09 - accuracy: 1.0000 - val_loss: 0.2513 - val_accuracy: 0.9809 Epoch 132/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.5916e-09 - accuracy: 1.0000 - val_loss: 0.2563 - val_accuracy: 0.9802 Epoch 133/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.0729e-09 - accuracy: 1.0000 - val_loss: 0.2569 - val_accuracy: 0.9804 Epoch 134/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.8787e-09 - accuracy: 1.0000 - val_loss: 0.2600 - val_accuracy: 0.9800 Epoch 135/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.4185e-07 - accuracy: 1.0000 - val_loss: 0.2615 - val_accuracy: 0.9812 Epoch 136/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.6519e-05 - accuracy: 1.0000 - val_loss: 0.2553 - val_accuracy: 0.9808 Epoch 137/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.3633e-07 - accuracy: 1.0000 - val_loss: 0.2569 - val_accuracy: 0.9806 Epoch 138/150 1875/1875 [==============================] - 6s 3ms/step - loss: 6.9560e-09 - accuracy: 1.0000 - val_loss: 0.2525 - val_accuracy: 0.9804 Epoch 139/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.1523e-09 - accuracy: 1.0000 - val_loss: 0.2566 - val_accuracy: 0.9802 Epoch 140/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.4430e-09 - accuracy: 1.0000 - val_loss: 0.2583 - val_accuracy: 0.9804 Epoch 141/150 1875/1875 [==============================] - 6s 3ms/step - loss: 1.9874e-09 - accuracy: 1.0000 - val_loss: 0.2600 - val_accuracy: 0.9804 Epoch 142/150 1875/1875 [==============================] - 6s 3ms/step - loss: 2.1866e-09 - accuracy: 1.0000 - val_loss: 0.2630 - val_accuracy: 0.9801 Epoch 143/150 1875/1875 [==============================] - 6s 3ms/step - loss: 3.2025e-09 - accuracy: 1.0000 - val_loss: 0.2676 - val_accuracy: 0.9791 Epoch 144/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.0649e-09 - accuracy: 1.0000 - val_loss: 0.2643 - val_accuracy: 0.9798 Epoch 145/150 1875/1875 [==============================] - 5s 3ms/step - loss: 2.6327e-09 - accuracy: 1.0000 - val_loss: 0.2652 - val_accuracy: 0.9795 Epoch 146/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.3974e-09 - accuracy: 1.0000 - val_loss: 0.2689 - val_accuracy: 0.9790 Epoch 147/150 1875/1875 [==============================] - 5s 3ms/step - loss: 4.5859e-09 - accuracy: 1.0000 - val_loss: 0.2680 - val_accuracy: 0.9794 Epoch 148/150 1875/1875 [==============================] - 5s 3ms/step - loss: 1.1766e-06 - accuracy: 1.0000 - val_loss: 0.2652 - val_accuracy: 0.9792 Epoch 149/150 1875/1875 [==============================] - 5s 3ms/step - loss: 3.0583e-05 - accuracy: 1.0000 - val_loss: 0.2536 - val_accuracy: 0.9796 Epoch 150/150 1875/1875 [==============================] - 5s 3ms/step - loss: 5.4311e-06 - accuracy: 1.0000 - val_loss: 0.2614 - val_accuracy: 0.9790
from matplotlib.pyplot import figure
plt.figure(figsize=(15,15))
best_history_df=pd.DataFrame(best_history.history)
plt.plot(best_history_df, linewidth=5)
plt.legend(best_history_df.columns.to_list())
plt.show()
y_pred_best = best_model.predict_classes(X_test)
plt.figure(figsize=(15,15))
for i in range(16):
plt.subplot(4,4, i+1)
plt.imshow(X_test[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_pred_best[i]), fontsize=15)
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
layer_outputs= [layer.output for layer in best_model.layers]
activation_model_best=models.Model(inputs=best_model.input, outputs=layer_outputs)
print(f"There are {len(layer_outputs)} layers")
There are 2 layers
activations_best = activation_model_best.predict(X_train)
hidden_layer_activation_best = activations_best[0]
output_layer_activations_best = activations_best[1]
print(hidden_layer_activation_best.shape)
print(f"The maximum activation value of the hidden nodes in the hidden layer is {hidden_layer_activation_best.max()}")
(60000, 256) The maximum activation value of the hidden nodes in the hidden layer is 59.33527755737305
y_train_pred_best=best_model.predict_classes(X_train)
activation_data_best = {'actual_class':y_train}
for i in range(0,256):
activation_data_best["Node{}".format(i)] = hidden_layer_activation_best[:,i]
activation_df_best = pd.DataFrame(activation_data_best)
for i in range(0,10):
activation_df_best['Output_Node_{}'.format(i)]=output_layer_activations_best[:,i]
activation_df_best['best_model_prediction']=y_train_pred_best
plt.figure(figsize=(15,15))
for i in range(0,16):
plt.subplot(4,4, i+1)
plt.imshow(X_train[i].reshape(28,28)*255, cmap=plt.get_cmap('gray'))
plt.xlabel('pred={}'.format(y_train_pred_best[i]), fontsize=15)
display(activation_df_best.round(3).T.iloc[:,0:16])
plt.show()
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:450: UserWarning: `model.predict_classes()` is deprecated and will be removed after 2021-01-01. Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).
warnings.warn('`model.predict_classes()` is deprecated and '
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| actual_class | 5.000 | 0.000 | 4.000 | 1.00 | 9.000 | 2.000 | 1.000 | 3.000 | 1.000 | 4.000 | 3.000 | 5.000 | 3.000 | 6.000 | 1.000 | 7.0 |
| Node0 | 0.000 | 2.694 | 0.673 | 0.00 | 1.622 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 3.285 | 0.000 | 0.000 | 0.0 |
| Node1 | 0.000 | 0.000 | 7.112 | 3.39 | 0.000 | 0.000 | 0.000 | 0.000 | 0.527 | 1.133 | 0.000 | 1.982 | 11.769 | 0.000 | 0.165 | 0.0 |
| Node2 | 3.063 | 1.069 | 0.501 | 0.00 | 0.000 | 2.135 | 0.000 | 1.912 | 0.000 | 0.000 | 0.649 | 0.000 | 0.000 | 4.422 | 0.000 | 0.0 |
| Node3 | 0.000 | 0.000 | 0.860 | 0.00 | 2.181 | 0.000 | 1.693 | 0.000 | 1.776 | 6.811 | 0.000 | 0.000 | 10.352 | 5.132 | 3.229 | 0.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| Output_Node_6 | 0.000 | 0.000 | 0.000 | 0.00 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 1.000 | 0.000 | 0.0 |
| Output_Node_7 | 0.000 | 0.000 | 0.000 | 0.00 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 1.0 |
| Output_Node_8 | 0.000 | 0.000 | 0.000 | 0.00 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.0 |
| Output_Node_9 | 0.000 | 0.000 | 0.000 | 0.00 | 1.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.0 |
| best_model_prediction | 5.000 | 0.000 | 4.000 | 1.00 | 9.000 | 2.000 | 1.000 | 3.000 | 1.000 | 4.000 | 3.000 | 5.000 | 3.000 | 6.000 | 1.000 | 7.0 |
268 rows × 16 columns
activation_df_best['accurate']=np.where(activation_df_best['actual_class']==activation_df_best['best_model_prediction'],1,0)
class_error_best=activation_df_best[activation_df_best['actual_class']!=activation_df_best['best_model_prediction']].groupby(['actual_class'], as_index=False)[['best_model_prediction']].agg(lambda x:x.value_counts().index[0])
class_error_best['most_common_error']=class_error_best['best_model_prediction']
del class_error_best['best_model_prediction']
class_accuracy_best=activation_df_best.groupby(['actual_class'], as_index=False)[['accurate']].mean()
class_accuracy_best=pd.merge(class_accuracy_best, class_error_best)
class_accuracy_best
| actual_class | accurate | most_common_error |
|---|
#there were no errors*
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
from sklearn.ensemble import RandomForestClassifier
# I am going to find 3 principal nodes to show that the classes cluster when trained on a larger DNN
pca = PCA(n_components=3)
principalComponents = pca.fit_transform(hidden_layer_activation_best)
pca_df=pd.DataFrame(data = principalComponents, columns = ['pc1', 'pc2', 'pc3'])
pca_df['actual_class']=y_train
pca_df
| pc1 | pc2 | pc3 | actual_class | |
|---|---|---|---|---|
| 0 | 7.453801 | -7.367122 | 11.707567 | 5 |
| 1 | 13.584109 | 17.024157 | -26.267796 | 0 |
| 2 | -21.384607 | 16.297995 | -21.635380 | 4 |
| 3 | -14.476027 | -21.987431 | -8.120638 | 1 |
| 4 | -19.410610 | 0.259770 | -2.414729 | 9 |
| ... | ... | ... | ... | ... |
| 59995 | 2.254990 | -16.673790 | -7.668561 | 8 |
| 59996 | 13.780117 | -17.226152 | 0.155531 | 3 |
| 59997 | -11.627386 | 2.199162 | 1.393840 | 5 |
| 59998 | -3.107873 | 2.274452 | -16.656191 | 6 |
| 59999 | -19.410231 | -4.651251 | -21.834320 | 8 |
60000 rows × 4 columns
fig, axes = plt.subplots(1, 3, figsize=(25,10))
sns.scatterplot(x="pc1", y="pc2", hue="actual_class", palette=sns.color_palette("hls", 10), data=pca_df, legend="full", alpha=0.3, ax=axes[0])
sns.scatterplot(x="pc1", y="pc3", hue="actual_class", palette=sns.color_palette("hls", 10), data=pca_df, legend="full", alpha=0.3, ax=axes[1])
sns.scatterplot(x="pc2", y="pc3", hue="actual_class", palette=sns.color_palette("hls", 10), data=pca_df, legend="full", alpha=0.3, ax=axes[2])
plt.show()
ax = plt.figure(figsize=(16,10)).gca(projection='3d')
ax.scatter(
xs=pca_df['pc1'],
ys=pca_df['pc2'],
zs=pca_df['pc3'],
c=pca_df.loc[:,"actual_class"],
cmap='tab10')
ax.set_xlabel('pca-one')
ax.set_ylabel('pca-two')
ax.set_zlabel('pca-three')
plt.show()
#further analysis
from matplotlib.transforms import offset_copy
pca_by_output=pd.DataFrame(hidden_layer_activation_best)
pca_by_output['actual_class']=y_train
pca = PCA(n_components=3)
pca0=pca_by_output[pca_by_output['actual_class']==0].reset_index(drop=True)
del pca0['actual_class']
pca0 = pca.fit(pca0)
pca0 = pca.transform(hidden_layer_activation_best)
pca0=pd.DataFrame(data = pca0, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca1=pca_by_output[pca_by_output['actual_class']==1].reset_index(drop=True)
del pca1['actual_class']
pca1 = pca.fit(pca1)
pca1 = pca.transform(hidden_layer_activation_best)
pca1=pd.DataFrame(data = pca1, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca2=pca_by_output[pca_by_output['actual_class']==2].reset_index(drop=True)
del pca2['actual_class']
pca2 = pca.fit(pca2)
pca2 = pca.transform(hidden_layer_activation_best)
pca2=pd.DataFrame(data = pca2, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca3=pca_by_output[pca_by_output['actual_class']==3].reset_index(drop=True)
del pca3['actual_class']
pca3 = pca.fit(pca3)
pca3 = pca.transform(hidden_layer_activation_best)
pca3=pd.DataFrame(data = pca3, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca4=pca_by_output[pca_by_output['actual_class']==4].reset_index(drop=True)
del pca4['actual_class']
pca4 = pca.fit(pca4)
pca4 = pca.transform(hidden_layer_activation_best)
pca4=pd.DataFrame(data = pca4, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca5=pca_by_output[pca_by_output['actual_class']==5].reset_index(drop=True)
del pca5['actual_class']
pca5 = pca.fit(pca5)
pca5 = pca.transform(hidden_layer_activation_best)
pca5=pd.DataFrame(data = pca5, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca6=pca_by_output[pca_by_output['actual_class']==6].reset_index(drop=True)
del pca6['actual_class']
pca6 = pca.fit(pca6)
pca6 = pca.transform(hidden_layer_activation_best)
pca6=pd.DataFrame(data = pca6, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca7=pca_by_output[pca_by_output['actual_class']==7].reset_index(drop=True)
del pca7['actual_class']
pca7 = pca.fit(pca7)
pca7 = pca.transform(hidden_layer_activation_best)
pca7=pd.DataFrame(data = pca7, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca8=pca_by_output[pca_by_output['actual_class']==8].reset_index(drop=True)
del pca8['actual_class']
pca8 = pca.fit(pca8)
pca8 = pca.transform(hidden_layer_activation_best)
pca8=pd.DataFrame(data = pca8, columns = ['pc1', 'pc2', 'pc3'])
pca = PCA(n_components=3)
pca9=pca_by_output[pca_by_output['actual_class']==9].reset_index(drop=True)
del pca9['actual_class']
pca9 = pca.fit(pca9)
pca9 = pca.transform(hidden_layer_activation_best)
pca9=pd.DataFrame(data = pca9, columns = ['pc1', 'pc2', 'pc3'])
pca_by_output_lst=[pca0,pca1,pca2,pca3,pca4,pca5,pca6,pca7,pca8,pca9]
fig, axes = plt.subplots(10, 3, figsize=(35,60))
output=0
rows = ['Class {}'.format(row) for row in range(0,9)]
for i in pca_by_output_lst:
i['actual_class']=y_train
sns.scatterplot(x="pc1", y="pc2", hue="actual_class", palette=sns.color_palette("hls", 10), data=i, legend="full", alpha=0.3, ax=axes[output,0])
sns.scatterplot(x="pc1", y="pc3", hue="actual_class", palette=sns.color_palette("hls", 10), data=i, legend="full", alpha=0.3, ax=axes[output,1])
sns.scatterplot(x="pc2", y="pc3", hue="actual_class", palette=sns.color_palette("hls", 10), data=i, legend="full", alpha=0.3, ax=axes[output,2])
output=output+1
rows = ['{} Classification'.format(row) for row in range(0,9)]
for ax, row in zip(axes[:,0], rows):
ax.annotate(row, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - 5, 0), xycoords=ax.yaxis.label, textcoords='offset points', size='large', ha='right', va='center')
fig.tight_layout()
plt.show()